package com.ms.qw.jsf.datamodel;

import com.ms.qw.application.mappers.RecetaMapper;
import com.ms.qw.client.dto.RecetaDTO;
import com.ms.qw.client.dto.RecetaFlt;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class LazyReclamoModel extends LazyDataModel<RecetaDTO> {

    RecetaMapper recetaMapper;
    private RecetaFlt recetaFlt;
    private List<RecetaDTO> recetas= new ArrayList<RecetaDTO>();



    public LazyReclamoModel(RecetaMapper recetaMapper,RecetaFlt recetaFlt) {
        this.recetaMapper = recetaMapper;
        this.recetaFlt=recetaFlt;
    }

    private Integer calcularTamanioTotal() {
        Integer numeroNotificaciones = recetaMapper.total(recetaFlt);
        return numeroNotificaciones < 500 ? numeroNotificaciones:500;
    }

    @Override
    public List<RecetaDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {

        Integer totalSize= calcularTamanioTotal();
        int start = first;
        int end = first + pageSize;

        if(end> totalSize){
            end=totalSize;
        }
        recetaFlt.setStart(start);
        recetaFlt.setEnd(end);
        recetas = recetaMapper.find(recetaFlt);
        setRowCount(totalSize);
        return recetas;
    }


    @Override
    public RecetaDTO getRowData(String rowKey) {
        for(RecetaDTO n : recetas) {
            if(n.getCodigo().equals(Integer.valueOf(rowKey)))
                return n;
        }

        return null;
    }
    @Override
    public Object getRowKey(RecetaDTO n) {
        return n.getCodigo();
    }

    @Override
    public void setRowIndex(int rowIndex) {
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        } else{

            super.setRowIndex(rowIndex % getPageSize());
        }

    }

}
